import axios from "axios";

/**
 * URL验证函数
 */
export const isValidUrl = (url) => {
  try {
    new URL(url);
    return true;
  } catch (e) {
    return false;
  }
};

/**
 * 提取URL的基础部分（协议+主机名）
 * @param {string} url - 完整的URL地址
 * @returns {string} 基础URL部分（如 https://ruanyifeng.com）
 */
export const extractBaseUrl = (url) => {
  try {
    const urlObj = new URL(url);
    return `${urlObj.protocol}//${urlObj.host}`;
  } catch (error) {
    console.error("URL解析失败:", error);
    throw new Error("无效的URL格式");
  }
};

/**
 * 图片下载方法
 */
export const downloadImageAsBase64 = async (url) => {
  // 验证URL
  if (!isValidUrl(url)) {
    throw new Error("图片url无效");
  }

  try {
    // 发起请求，获取二进制数据
    const response = await axios.get(url, {
      responseType: "arraybuffer", // 关键：获取二进制数据
    });

    // 获取图片MIME类型
    const contentType = response.headers["content-type"] || "image/jpeg";

    // 转换二进制数据为base64（浏览器环境使用btoa）
    const base64String = btoa(
      new Uint8Array(response.data).reduce(
        (data, byte) => data + String.fromCharCode(byte),
        ""
      )
    );

    // 返回完整的base64格式
    return `data:${contentType};base64,${base64String}`;
  } catch (error) {
    console.error("图片下载失败:", error);
    throw new Error(`下载失败: ${error.message || "未知错误"}`);
  }
};
